package com.yupi.yupicturebackend.manager.auth.annotation;

import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.annotation.AliasFor;
import com.yupi.yupicturebackend.manager.auth.StpKit;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 空间权限认证，必须具有指定权限，才能进入该方法
 * 可标注在函数、类上（效果等同于标注在此类的所有方法上）
 */
@SaCheckPermission(type = StpKit.SPACE_TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface SaSpaceCheckPermission {
    /**
     * 需要校验的权限码
     * @return
     */
    @AliasFor(annotation = SaCheckPermission.class)
    String[] value() default "";
    /**
     * 验证模式 AND|OR 默认and
     */
    @AliasFor(annotation = SaCheckPermission.class)
    SaMode mode() default SaMode.AND;

    /**
     * 在权限校验不通过时的次要选择
     * 两者只要其一校验成功即可通过校验
     * 举例：
     * @SaCheckPermission(value = "user-add",orRole = "admin")
     * 满足一个条件即可
     * @return
     */
    @AliasFor(annotation = SaCheckPermission.class)
    String[] role() default "";

}
